//
// Created by Jisam on 2024/8/14 22:59.
// solve e3
//
#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <chrono>
#include <cmath>
#include <cstdint>
#include <cstring>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <vector>

using namespace std;

#define endl "\n"
#define PSI pair<string,int>
#define PII pair<int,int>
#define PDI pair<double,int>
#define PDD pair<double,double>
#define VVI vector<vector<int>>
#define VI vector<int>
#define VS vector<string>

#define PQLI priority_queue<int, vector<int>, less<int>>
#define PQGI priority_queue<int, vector<int>, greater<int>>
#define u32 unsigned
#define i64 long long
#define u64 unsigned long long
using namespace std;
const i64 mod = 1e9 + 7;

template<typename  T>
T fast_pow(T b, T e, T m) {
    T r = 1;
    while (e > 0) {
        if (e & 1) r = (r * b) % m;
        b = (b * b) % m;
        e >>= 1;
    }
    return r;
}

// 计算给定整数x的模逆元
// 该函数利用费马小定理，通过快速幂算法计算模逆元
// 参数:
//   x - 需要计算模逆元的整数
// 返回值:
//   返回x的模逆元
i64 inline inv(i64 x) { return fast_pow(x, mod - 2, mod); }

// 解决方案函数，用于计算预期分数
void solve() {
    // 初始化变量N和K，分别代表总球数和特殊球数
    int N, K;
    cin >> N >> K;

    // 初始化一个长度为N的整数向量values，用于存储每个球的分数
    vector<i64> values(N);
    // 初始化变量avg_special_value和avg_normal_value，分别用于累计特殊球和普通球的总分数
    i64 avg_special_value = 0, avg_normal_value = 0;
    // 遍历输入的每个球的分数，并根据是否为特殊球累加到相应的变量中
    for (int i = 0; i < N; i++) {
        cin >> values[i];
        if (i < K)
            avg_special_value += values[i];
        else
            avg_normal_value += values[i];
    }

    // 计算总分数并对mod取模，用于后续计算
    i64 total_score = (avg_normal_value + avg_special_value) % mod;

    // 对普通球和特殊球的总分数取模，以防止溢出
    avg_normal_value %= mod;
    avg_special_value %= mod;

    // 计算普通球和特殊球的平均分数，考虑到除法在模运算中的逆元性质
    avg_special_value = (avg_special_value * inv(K)) % mod;
    avg_normal_value = (avg_normal_value * inv(N - K)) % mod;

    // 计算普通球的个数，用于计算预期分数
    i64 count_normal_balls = (N - K + 1) / 2;
    // 计算特殊球的预期个数，考虑到特殊球和普通球的组合方式
    i64 expected_special_balls =
            (((((N - K + 2) / 2) * K) % mod) * inv(N - K + 1)) % mod;

    // 根据普通球和特殊球的平均分数及其个数，计算Alice的预期分数
    i64 expected_alice_score = (count_normal_balls * avg_normal_value +
                                expected_special_balls * avg_special_value) %
                               mod;

    // 根据总分数和Alice的预期分数，计算Bob的预期分数
    i64 expected_bob_score =
            ((total_score - expected_alice_score) % mod + mod) % mod;

    // 输出Alice和Bob的预期分数
    cout << expected_alice_score << " " << expected_bob_score << "\n";
}



int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int T = 1;
    cin >> T;
    while (T--) solve();
//    cout << "\n"[];
    return 0;
}